/**
 * Created in 2012-3-2.
 */
package com.surekam.mnai.service.extractor;

/**
 * ILmitation接口的抽象实现。
 * 
 * @author 吴政
 * 
 */
public abstract class AbstractLimitation implements ILimitation {

	/**
	 * 模板方法，定义ILimitation接口实现的默认行为。
	 * 
	 * @see com.surekam.mnai.service.extractor.ILimitation#checkLimit()
	 */
	@Override
	public void checkLimit() throws OutOfLimitationException {
		if (isOutOfLimitation()) {
			throw new OutOfLimitationException();
		} else {
			noteCheck();
		}
	}

	/**
	 * 判断本次调用是否超出限制范围。
	 * 
	 * @return 如果本次调用超出了限制，返回true，否则返回false。
	 */
	abstract protected boolean isOutOfLimitation();

	/**
	 * 记录本次验证，为下一次验证提供依据。
	 */
	abstract protected void noteCheck();

}
